//导入路由对象
import router from "@/router";

// 导入提示框
import {
  Message
} from 'element-ui'
//导入操作 token 的方法
import {
  getToken
} from '@/utils/auth'

//定义一个白名单
const whiteList = ['/404', '/login']
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

//导入 store
import store from '@/store'
//添加前置守卫
router.beforeEach(async (to, from, next) => {
  NProgress.start() // 开启进度条
  //to:路由要跳转到目标页面
  //from:路由从哪个页面中跳转的
  //next:是否向下执行
  //得到token
  const token = getToken()
  if (token) {
    //存在
    //得到用户信息
    const userInfo = store.getters.userInfo
    //判断用户信息是否存在
    if (!userInfo.username) {
      //不存在,获取用户信息
      const userInfo = await store.dispatch('user/getUserInfo')
      //路由筛选
      const newRoutes = await store.dispatch('permission/setRoutes',
        userInfo.roles.menus)
      // console.log(newRoutes);
      // 将动态路由动态添加到 routes 中
      router.addRoutes([...newRoutes, {
        path: '*',
        redirect: '/404',
        hidden: true
      }])
      next(to.path)
    }
    //判断是否访问的登录页面
    if (to.path === '/login') {
      //是
      Message.info('你已经登录过,不要重复登录')
      NProgress.done() // 关闭进度条
      next('/')
    } else {
      //否
      next()
    }
  } else {
    //不存在
    //判断访问的路由是否在白名单中
    const bool = whiteList.includes(to.path)
    if (bool) {
      //在
      next()
    } else {
      //不在
      Message.info('对不起.你还没有登录')
      // 跳转到 login 之前，保存当前访问的路径 to.path
      next(`/login?_redirect=${to.path}`)
    }
  }
})
// 后置守卫
router.afterEach((to, form) => {
  NProgress.done()
})
